package ch11.home;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

class Exercise11_08 {
	public static void calculateSchoolRank(List<Student08> list) {
		Collections.sort(list);

		int prevRank = -1;
		int prevTotal = -1;
		int length = list.size();

		//<1
		for(int i=0;i < length; i++) {
			Student08 s = list.get(i);
			// 1.1 총점(total)이 이전총점(prevTotal)과 같으면 이전 등수(prevRank)를 등수(schoolRank)로 한다.
			// 1.2 총점이 서로 다르면, 등수(schoolRank)의 값을 알맞게 계산해서 저장한다. 이전에 동점자였다면, 그 다음 등수는 동점자의 수를 고려해야한다.
			if(s.total==prevTotal) s.schoolRank = prevRank;
			else s.schoolRank = i + 1;			
			
			// 1.3 현재 총점과 등수를 이전총점(prevTotal)과 이전등수(prevRank)에 저장한다.
			prevRank = s.schoolRank;
			prevTotal = s.total;
		}
		//1>
	}

	public static void main(String[] args) {
		ArrayList<Student08> list = new ArrayList<Student08>();
		list.add(new Student08("이자바", 2, 1, 70, 90, 70));
		list.add(new Student08("안자바", 2, 2, 60, 100, 80));
		list.add(new Student08("홍길동", 1, 3, 100, 100, 100));
		list.add(new Student08("남궁성", 1, 1, 90, 70, 80));
		list.add(new Student08("김자바", 1, 2, 80, 80, 90));

		calculateSchoolRank(list);
		for (Student08 student : list)
			System.out.println(student);
	}
}

class Student08 implements Comparable<Student08> {
	String name;
	int ban;
	int no;
	int kor;
	int eng;
	int math;
	int total; // 총점
	int schoolRank; // 전교등수

	Student08(String name, int ban, int no, int kor, int eng, int math) {
		this.name = name;
		this.ban = ban;
		this.no = no;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
		total = kor + eng + math;
	}

	int getTotal() {
		return total;
	}

	float getAverage() {
		return (int) ((getTotal() / 3f) * 10 + 0.5) / 10f;
	}

	public int compareTo(Student08 student) {
		return student.total - this.total;
	}

	public String toString() {
		return name + "," + ban + "," + no + "," + kor + "," + eng + "," + math
				+ "," + getTotal() + "," + getAverage() + "," + schoolRank;
	}
}
/*
홍길동,1,3,100,100,100,300,100.0,1
김자바,1,2,80,80,90,250,83.3,2
안자바,2,2,60,100,80,240,80.0,3
남궁성,1,1,90,70,80,240,80.0,3
이자바,2,1,70,90,70,230,76.7,5
*/